package org.kgduyjj.toolkit.enumtype;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 性别枚举
 * 
 * @author Kgduyjj
 * @since 2020-12-18
 * @version 1.0.10
 *
 */
@Getter
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public enum Gender {
    /** 未知 */
    UNKNOWN(0, "未知"),
    /** 男性 */
    MALE(1, "男性"),
    /** 女性 */
    FEMALE(2, "女性");

    protected Integer code;
    protected String desc;

    /**
     * 若枚举数组内存在则返回匹配项，若不存在则返回指定默认值[ <code>defaultValue</code> ]
     * 
     * @param code
     * @param defaultValue
     * @return
     */
    protected static Gender defualtOf(final Integer code, final Gender defaultValue) {
        if (null == code) {
            return defaultValue;
        }
        for (Gender item : Gender.values()) {
            if (item.getCode().equals(code)) {
                return item;
            }
        }
        return defaultValue;
    }

    /**
     * 根据code检查枚举对象
     * 
     * @param code
     * @return
     */
    public static boolean valdiateCode(final Integer code) {
        Gender E = defualtOf(code, null);
        return null == E;
    }

    /**
     * 
     * 根据Code获取对应的数据
     * 
     * @param code
     * @return
     */
    public static Gender tranfer(final Integer code) {
        return defualtOf(code, null);
    }

    /**
     * 根据code获取对应描述
     * 
     * @return
     */
    public static String getDescByCode(Integer code) {
        Gender E = tranfer(code);
        return E == null ? null : E.getDesc();
    }
}
